package ua.diploma.hibernate.dao;

import java.sql.SQLException;
import java.util.List;

import ua.diploma.hibernate.dto.User;

/**
 * Интерфейс ДАО для работы с таблицей юзеров
 * 
 * @author netstalk3r
 * 
 */
public interface UserDAO {

	/**
	 * Добавить юзера в таблицу
	 * 
	 * @param user
	 *            юзер, кторого надо добавить
	 * @throws SQLException
	 *             Ошибка работы с бд
	 */
	void addUser(User user) throws SQLException;

	/**
	 * Обновить юзера в таблице
	 * 
	 * @param user
	 *            юзер, которго надо обновить
	 * @throws SQLException
	 *             ошибка работы с бд
	 */
	void updateUser(User user) throws SQLException;

	/**
	 * Получить всех юзеров
	 * 
	 * @return список всех юзеров в таблице
	 * @throws SQLException
	 *             ошибка работы с бд
	 */
	List<User> getAllUsers() throws SQLException;

	/**
	 * Удалить юзера из таблицы
	 * 
	 * @param user
	 *            юзер, которого нужно удалить
	 * @throws SQLException
	 *             ошибка работы с бд
	 */
	void deleteUser(User user) throws SQLException;

	/**
	 * Поиск юзера по id
	 * 
	 * @param id
	 *            id юзера для поиска
	 * @return найденный юзер
	 * @throws SQLException
	 *             ошибка работы с бд
	 */
	User getUserById(Integer id) throws SQLException;

	/**
	 * Поиск юзера по логину
	 * 
	 * @param login
	 *            логин юзера для поиска
	 * @return найденный юзер
	 * @throws SQLException
	 *             ошибка работы бд
	 */
	User getUserByLogin(String login) throws SQLException;

	/**
	 * Функция проверки наличия юзера по логину
	 * 
	 * @param login
	 *            логин юзера для проверки наличия в базе
	 * @return количество записей, если равно 1, значит юзер с таким ником уже
	 *         есть в базе
	 * @throws SQLException
	 *             ошибка работы бд
	 */
	Integer checkUsersPresence(String login) throws SQLException;

	/**
	 * Поиск юзера по хэшу
	 * 
	 * @param activationHash
	 *            хэш
	 * @return найденный юзер
	 * @throws SQLException
	 *             ошибка работы бд
	 */
	User getUserByActivationHash(String activationHash) throws SQLException;

	/**
	 * Поиск юзера по email
	 * 
	 * @param email
	 * @return user
	 * @throws SQLException
	 *             ошибка работы бд
	 */
	User getUserByEmail(String email) throws SQLException;
}
